{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "import numpy as np \n",
    "import pandas as pd \n",
    "import matplotlib.pyplot as plt \n",
    "import torch \n",
    "from torch import nn\n",
    "\n",
    "#数据预处理\n",
    "data = pd.read_csv('example_wp_log_peyton_manning.csv',usecols=[1])\n",
    "data = data.dropna() #丢弃空值\n",
    "dataset = data.values\n",
    "dataset = dataset.astype('float32')\n",
    "\n",
    "max_value = np.max(dataset)\n",
    "min_value = np.min(dataset)\n",
    "scalar = max_value - min_value\n",
    "dataset = list(map(lambda x: x/scalar, dataset)) #将数据归一化到0~1之间\n",
    "\n",
    "#划分数据集\n",
    "#通过前面几条的数据来预测下一条的数据，look_back设置具体的把前面几条的数据作为预测的输入data_X，而输出就是下一条data_Y\n",
    "def create_dataset(dataset,look_back=2): # 每个的滑动窗口设置为2\n",
    "    dataX, dataY=[], []\n",
    "    for i in range(len(dataset)-look_back):\n",
    "        a=dataset[i:(i+look_back)]\n",
    "        dataX.append(a)    # 记录窗口的值\n",
    "        dataY.append(dataset[i+look_back]) # 记录除了前面两个以外的所有值作为正确的标签\n",
    "    return np.array(dataX), np.array(dataY)\n",
    "#创建好输入与输出 data_Y作为正确的预测值\n",
    "data_X, data_Y = create_dataset(dataset)\n",
    "\n",
    "#划分训练集和测试集，70%作为训练集\n",
    "train_size = int(len(data_X) * 0.7)\n",
    "test_size = len(data_X)-train_size\n",
    "\n",
    "train_X = data_X[:train_size]\n",
    "train_Y = data_Y[:train_size]\n",
    "\n",
    "test_X = data_X[train_size:]\n",
    "test_Y = data_Y[train_size:]\n",
    "\n",
    "#最后，我们需要将数据改变一下形状，因为 RNN 读入的数据维度是 (seq, batch, feature)，所以要重新改变一下数据的维度，这里只有一个序列，所以 batch 是 1，而输入的 feature 就是我们希望依据的几天，这里我们定的是两个天，所以 feature 就是 2.\n",
    "\n",
    "train_X = train_X.reshape(-1,1,2)\n",
    "train_Y = train_Y.reshape(-1,1,1)\n",
    "test_X = test_X.reshape(-1,1,2)\n",
    "\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [],
   "source": [
    "#lstm 网络\n",
    "class lstm_reg(nn.Module):#括号中的是python的类继承语法，父类是nn.Module类 不是参数的意思\n",
    "    def __init__(self,input_size,hidden_size, output_size=1,num_layers=2): # 构造函数\n",
    "        #inpu_size 是输入的样本的特征维度， hidden_size 是LSTM层的神经元个数，\n",
    "        #output_size是输出的特征维度\n",
    "        super(lstm_reg,self).__init__()# super用于多层继承使用，必须要有的操作\n",
    " \n",
    "        self.rnn = nn.LSTM(input_size,hidden_size,num_layers)# 两层LSTM网络，\n",
    "        self.reg = nn.Linear(hidden_size,output_size)#把上一层总共hidden_size个的神经元的输出向量作为输入向量，然后回归到output_size维度的输出向量中\n",
    " \n",
    "    def forward(self,x): #x是输入的数据\n",
    "        x, _ = self.rnn(x)# 单个下划线表示不在意的变量，这里是LSTM网络输出的两个隐藏层状态\n",
    "        s,b,h = x.shape\n",
    "        x = x.view(s*b, h)\n",
    "        x = self.reg(x)\n",
    "        x = x.view(s,b,-1)#使用-1表示第三个维度自动根据原来的shape 和已经定了的s,b来确定\n",
    "        return x\n",
    "#我使用了GPU加速，如果不用的话需要把.cuda()给注释掉    \n",
    "net = lstm_reg(2,4)\n",
    "net = net.cuda()\n",
    "criterion = nn.MSELoss().cuda()\n",
    "optimizer = torch.optim.Adam(net.parameters(),lr=1e-2)    "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "ename": "NameError",
     "evalue": "name 'train_x' is not defined",
     "output_type": "error",
     "traceback": [
      "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m",
      "\u001b[1;31mNameError\u001b[0m                                 Traceback (most recent call last)",
      "\u001b[1;32m<ipython-input-4-bf3ac9e1b7d6>\u001b[0m in \u001b[0;36m<module>\u001b[1;34m()\u001b[0m\n\u001b[0;32m      5\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m      6\u001b[0m \u001b[1;31m#将tensor放在GPU上面进行运算\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m----> 7\u001b[1;33m     \u001b[0mvar_x\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mtrain_x\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mcuda\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m      8\u001b[0m     \u001b[0mvar_y\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mtrain_y\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mcuda\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m      9\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n",
      "\u001b[1;31mNameError\u001b[0m: name 'train_x' is not defined"
     ]
    }
   ],
   "source": [
    "for e in range(10000):\n",
    "# 新版本中可以不使用Variable了    \n",
    "#     var_x = Variable(train_x).cuda() \n",
    "#     var_y = Variable(train_y).cuda()\n",
    "\n",
    "#将tensor放在GPU上面进行运算\n",
    "    var_x = train_x.cuda()\n",
    "    var_y = train_y.cuda()\n",
    " \n",
    "    out = net(var_x)\n",
    "    loss = criterion(out, var_y)\n",
    " \n",
    "    optimizer.zero_grad()\n",
    "    loss.backward()\n",
    "    optimizer.step()\n",
    "    if (e+1)%100 == 0:\n",
    "        print('Epoch: {}, Loss:{:.5f}'.format(e+1, loss.item()))\n",
    "#存储训练好的模型参数        \n",
    "torch.save(net.state_dict(), 'example_wp_log.net_params.pkl')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAXQAAAD8CAYAAABn919SAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMi4yLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvhp/UCwAAIABJREFUeJzsnXmYFMX5x781x+7svSwsl4CAIsgtlxDFG0QU44VR44EX3lGjifozaqIxHjF4JBqPGPECE69I8D4wiAeKiooKCgKKIMcuyx5zz9Tvj+rqrp6u6Tl27q3P8+wzMz093bXdXd9++6233pdQSqFQKBSK4seR7wYoFAqFIjMoQVcoFIoSQQm6QqFQlAhK0BUKhaJEUIKuUCgUJYISdIVCoSgRlKArFApFiaAEXaFQKEoEJegKhUJRIrhyubMePXrQgQMH5nKXCoVCUfR8/PHHOyiljYnWy6mgDxw4ECtWrMjlLhUKhaLoIYRsTGa9hC4XQsg/CSHbCCGrhGU3EUI+J4SsJIS8Rgjp25nGKhQKhaLzJONDnw9gRsyyP1NKR1NKxwJYDOD6TDdMoVAoFKmRUNAppUsBNMcsaxU+VgFQKRsVCoUiz6TtQyeE3AzgdAC7ABycsRYpSoZQKIRNmzbB7/fnuyklhcfjQb9+/eB2u/PdFEWBQZLJh04IGQhgMaV0pOS7awB4KKU3xPntXABzAWDAgAHjN25MyrevKAHWr1+PmpoadO/eHYSQfDenJKCUoqmpCW1tbRg0aFC+m6PIEYSQjymlExKtl4k49AUAjo/3JaX0QUrpBErphMbGhFE3ihLC7/crMc8whBB0795dPfUopKQl6ISQIcLHowGszkxzFKWGEvPMo46pIh4JfeiEkIUADgLQgxCyCcANAGYSQoYCiALYCOD8bDaylPnqK6CpCZg6Nd8tUSgUxU4yUS4nU0r7UErdlNJ+lNKHKaXHU0pHaqGLsyilP+aisaXIiBHAAQfkuxWKZKmurgYAbN68GSeccILtunfddRe8Xq/+eebMmWhpaclq+xRdG5XLRdHliUQiKf+mb9++eOaZZ2zXiRX0l156CfX19SnvS6FIFiXoipJmw4YNGDZsGM444wyMHj0aJ5xwArxeLwYOHIgbb7wR+++/P55++mmsW7cOM2bMwPjx4zF16lSsXs2GhdavX48pU6Zg4sSJuO6660zbHTmSBX1FIhFceeWVGDVqFEaPHo2//vWvuOeee7B582YcfPDBOPhgFtU7cOBA7NixAwAwb948jBw5EiNHjsRdd92lb3PvvffGueeeixEjRmD69Onw+Xy5PFyKIienuVwUXZjLLgNWrszsNseOBTQxtGPNmjV4+OGHsd9+++Gss87CfffdB4DFcy9btgwAcOihh+L+++/HkCFDsHz5clx44YV46623cOmll+KCCy7A6aefjnvvvVe6/QcffBDr16/Hp59+CpfLhebmZjQ0NGDevHlYsmQJevToYVr/448/xiOPPILly5eDUop9990XBx54ILp164Zvv/0WCxcuxEMPPYQTTzwRzz77LE499dROHihFV0FZ6IqSp3///thvv/0AAKeeeqou4r/4xS8AAO3t7Xjvvfcwe/ZsjB07Fueddx62bNkCAHj33Xdx8sknAwBOO+006fbfeOMNnH/++XC5mH3U0NBg255ly5bh2GOPRVVVFaqrq3HcccfhnXfeAQAMGjQIY8eOBQCMHz8eGzZs6MR/ruhqKAtdkRuSsKSzRWyYH/9cVVUFAIhGo6ivr8fKOE8QicIEKaUphRLaTeYrLy/X3zudTuVyUaSEstAVJc/333+P999/HwCwcOFC7L///qbva2trMWjQIDz99NMAmOB+9tlnAID99tsPTz31FADgySeflG5/+vTpuP/++xEOhwEAzc0s9VFNTQ3a2tos6x9wwAH4z3/+A6/Xi46ODjz//POYquJWFRlACbqi5Nl7773x6KOPYvTo0WhubsYFF1xgWefJJ5/Eww8/jDFjxmDEiBF44YUXAAB333037r33XkycOBG7du2Sbv+cc87BgAEDMHr0aIwZMwYLFiwAAMydOxdHHHGEPijKGTduHObMmYNJkyZh3333xTnnnIN99tknw/+1oiuSVC6XTDFhwgSqClyY4U/qOTwNOePrr7/G3nvvndc2bNiwAUcddRRWrVqVeOUiohCOrSJ35DKXi0KhUCgKACXoipJm4MCBJWedKxTxUIKuUCgUJYISdIVCoSgRlKArFApFiaAEXaFQKEoEJegKhQ1z5sxJmFVRoSgUlKArugyUUkSj0Xw3Q6HIGkrQFSUNT0l74YUXYty4cXj88ccxZcoUjBs3DrNnz0Z7ezsA4MYbb8TEiRMxcuRIzJ071zbf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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "0.19564899538002084\n"
     ]
    }
   ],
   "source": [
    "net.load_state_dict(torch.load('example_wp_log.net_params.pkl')) \n",
    "var_data = torch.from_numpy(test_X).cuda()#net在GPU上面，所以输入的测试集合也要转入到GPU上面\n",
    "pred_test = net(var_data) # 测试集的预测结果\n",
    "pred_test = pred_test.cpu().view(-1).data.numpy()#先转移到cpu上才能转换为numpy\n",
    "\n",
    "#乘以原来归一化的刻度放缩回到原来的值域 \n",
    "origin_test_Y = test_Y*scalar\n",
    "origin_pred_test = pred_test*scalar\n",
    "\n",
    "#画图\n",
    "plt.plot(origin_pred_test, 'r', label='prediction')\n",
    "plt.plot(origin_test_Y, 'b', label='real')\n",
    "plt.legend(loc='best')\n",
    "plt.show()\n",
    "\n",
    "#计算MSE\n",
    "#loss = criterion(out, var_y)？\n",
    "true_data = origin_test_Y\n",
    "true_data = np.array(true_data)\n",
    "true_data = np.squeeze(true_data)  # 从二维变成一维\n",
    "MSE = true_data - origin_pred_test\n",
    "MSE = MSE*MSE\n",
    "MSE_loss = sum(MSE)/len(MSE)\n",
    "print(MSE_loss)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "INFO:fbprophet:Disabling daily seasonality. Run prophet with daily_seasonality=True to override this.\n",
      "C:\\Users\\BraveY\\Anaconda3\\lib\\site-packages\\pystan\\misc.py:399: FutureWarning:\n",
      "\n",
      "Conversion of the second argument of issubdtype from `float` to `np.floating` is deprecated. In future, it will be treated as `np.float64 == np.dtype(float).type`.\n",
      "\n"
     ]
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAXQAAAD8CAYAAABn919SAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMi4yLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvhp/UCwAAIABJREFUeJztnXd4HMX5xz9z6s2yJNu4YxPABheaDSamdxxM6KGXAKYktEB6AgFCEkJiSgIB8iNUYxI6IUBCS6gBTLcxBowNMeDe1E66Mr8/Zud2926uSacr8nyeR8/d7e3tjnZnvvvOO++8I6SUWCwWi6X0CRS6ABaLxWLJDVbQLRaLpZ9gBd1isVj6CVbQLRaLpZ9gBd1isVj6CVbQLRaLpZ9gBd1isVj6CVbQLRaLpZ9gBd1isVj6CeX5PNmgQYPkmDFj8nlKi8ViKXnefPPN1VLKwen2y6ugjxkzhnnz5uXzlBaLxVLyCCE+y2S/tC4XIcRfhBArhRDzPduuFEK8J4R4RwjxLyHE8N4U1mKxWCy9JxMf+h3AQXHbrpFSTpZSbg88Dlya64JZLBaLJTvSCrqU8gVgbdy2jZ6PdYBN2WixWCwFpsc+dCHEVcDJwAZg75yVyNJvCIVCLFu2jGAwWOii9Cuqq6sZOXIkFRUVhS6KpcgQmeRDF0KMAR6XUk40fPdjoFpKeVmS384CZgGMHj16p88+y8i3b+kHLFmyhIaGBlpaWhBCFLo4/QIpJWvWrKG1tZWxY8cWujiWPCGEeFNKOSXdfrmIQ78XODLZl1LKW6WUU6SUUwYPTht1Y+lHBINBK+Y5RghBS0uL7fVYjPRI0IUQW3k+Hgp8mJviWPobVsxzj72mlmSk9aELIeYCewGDhBDLgMuAGUKIcUAU+Aw4uy8L2Z/54ANYswZ2373QJbFYLKVOJlEux0kph0kpK6SUI6WUt0kpj5RSTnRCF2dKKb/IR2H7IxMmwB57FLoUlkypr68H4Msvv+Soo45Kue91111HR0dH7POMGTNYv359n5bPsmljc7lYNnkikUjWvxk+fDgPPPBAyn3iBf2JJ55g4MCBWZ/LYskUK+iWfs3SpUsZP348p5xyCpMnT+aoo46io6ODMWPGcMUVV7Dbbrtx//33s3jxYg466CB22mkndt99dz78UA0LLVmyhF133ZWpU6fy85//3HfciRNV0FckEuGSSy5h0qRJTJ48mT/84Q/ccMMNfPnll+y9997svbeK6h0zZgyrV68GYPbs2UycOJGJEydy3XXXxY65zTbbcOaZZzJhwgQOOOAAOjs783m5LCVOXnO5WDZhLrwQ3nknt8fcfntwxDAVixYt4rbbbmP69Ol8+9vf5qabbgJUPPdLL70EwL777svNN9/MVlttxWuvvca5557Lc889xwUXXMA555zDySefzI033mg8/q233sqSJUt4++23KS8vZ+3atTQ3NzN79myef/55Bg0a5Nv/zTff5Pbbb+e1115DSskuu+zCnnvuSVNTEx9//DFz587lz3/+M8cccwwPPvggJ554Yi8vlGVTwVroln7PqFGjmD59OgAnnnhiTMS/9a1vAdDW1sYrr7zC0Ucfzfbbb89ZZ53FV199BcDLL7/McccdB8BJJ51kPP4zzzzD2WefTXm5so+am5tTluell17i8MMPp66ujvr6eo444ghefPFFAMaOHcv2228PwE477cTSpUt78Z9bNjWshW7JDxlY0n1FfJif/lxXVwdANBpl4MCBvJOkB5EuTFBKmVUoYarJfFVVVbH3ZWVl1uViyQproVv6PZ9//jmvvvoqAHPnzmW33XbzfT9gwADGjh3L/fffDyjBfffddwGYPn069913HwBz5swxHv+AAw7g5ptvJhwOA7B2rUp91NDQQGtra8L+e+yxB4888ggdHR20t7fz8MMPs7uNW7XkACvoln7PNttsw5133snkyZNZu3Yt55xzTsI+c+bM4bbbbmO77bZjwoQJPProowBcf/313HjjjUydOpUNGzYYj3/GGWcwevRoJk+ezHbbbce9994LwKxZszj44INjg6KaHXfckVNPPZWdd96ZXXbZhTPOOIMddtghx/+1ZVMko1wuuWLKlCnSLnDhR/fU83gb8sbChQvZZpttClqGpUuXcsghhzB//vz0O5cQxXBtLfkjn7lcLBaLxVIEWEG39GvGjBnT76xziyUZVtAtFouln2AF3WKxWPoJVtAtFouln2AF3WKxWPoJVtAtlhSceuqpabMqWizFghV0yyaDlJJoNFroYlgsfYYVdEu/RqekPffcc9lxxx25++672XXXXdlxxx05+uijaWtrA+CKK65g6tSpTJw4kVmzZqXMt2KxFCs2OZclLxQwey6LFi3i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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "0.25229994660830146\n"
     ]
    }
   ],
   "source": [
    "import pandas as pd\n",
    "from fbprophet import Prophet\n",
    "df = pd.read_csv('example_wp_log_peyton_manning.csv')\n",
    "\n",
    "#Prophet使用\n",
    "m = Prophet()\n",
    "m.fit(df)\n",
    "#需要预测时间段为整个365天，也就是下一年的整个天数\n",
    "future = m.make_future_dataframe(periods=365)\n",
    "#开始预测\n",
    "forecast = m.predict(future)\n",
    "#预测的结果保存在yhat_upper列中\n",
    "forecast[['ds', 'yhat', 'yhat_lower', 'yhat_upper']].tail()\n",
    "#画图\n",
    "plt.plot(fb_pre, 'r', label='prediction')\n",
    "plt.plot(origin_test_Y, 'b', label='real')\n",
    "plt.legend(loc='best')\n",
    "plt.show()\n",
    "#计算MSE\n",
    "fb_pre = np.array(forecast['yhat'].iloc[2034:2905])#2034到2905是前面30%的测试集所对应的数据范围\n",
    "MSE = true_data - fb_pre\n",
    "MSE = MSE*MSE\n",
    "MSE_loss = sum(MSE)/len(MSE)\n",
    "print(MSE_loss)"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.5"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
